#include <bits/stdc++.h>
using namespace std;
using ll =long long;
#define all(v) v.begin(),v.end()
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
ll INF=2e15;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll n;cin>>n;
vector<ll> a(n-1);
for(ll i=0;i<n-1;i++) cin>>a[i];
ll root=a[0];
ll now=root;
vector<bool> note(n+10);
note[root]=true;
vector<pair<ll,ll>> ans;
ll ind=1;
for(ll i=n;i>=1;i--) {
if(note[i]) continue;
while(ind<n-1&&!note[i]) {
if(!note[a[ind]]) {
ans.push_back(make_pair(now,a[ind]));
note[a[ind]]=true;
now=a[ind];
}
else {
ans.push_back(make_pair(now,i));
note[i]=true;
now=a[ind];
}
ind++;
}
if(ind==n-1&&!note[i]) {
ans.push_back(make_pair(now,i));
note[i]=true;
}
if(!note[i]) {
cout<<-1<<endl;
return 0;
}
}
cout<<root<<endl;
for(auto x:ans) cout<<x.first<<" "<<x.second<<endl;
}
1472B - Fair Division | 1281C - Cut and Paste |
141A - Amusing Joke | 112A - Petya and Strings |
677A - Vanya and Fence | 1621A - Stable Arrangement of Rooks |
472A - Design Tutorial Learn from Math | 1368A - C+= |
450A - Jzzhu and Children | 546A - Soldier and Bananas |
32B - Borze | 1651B - Prove Him Wrong |
381A - Sereja and Dima | 41A - Translation |
1559A - Mocha and Math | 832A - Sasha and Sticks |
292B - Network Topology | 1339A - Filling Diamonds |
910A - The Way to Home | 617A - Elephant |
48A - Rock-paper-scissors | 294A - Shaass and Oskols |
1213A - Chips Moving | 490A - Team Olympiad |
233A - Perfect Permutation | 1360A - Minimal Square |
467A - George and Accommodation | 893C - Rumor |
227B - Effective Approach | 1534B - Histogram Ugliness |